🔗

Internet Protocol version 4 網際網路協定版本 4

作者AM
進度完成
週次2021.03 Week 4

前言


你可能是一般用戶,你也可能沒聽過一堆亂七八糟的網路協定,但唯有一個你不能錯過

「Internet Protocol」

「Internet Protocol」

「Internet Protocol」


咳咳, 「Internet Protocol」,也就是網際網路協定,是網際網路協議套組的一部份,通常跟另一個協定 TCP 綁在一起合稱 TCP / IP,在網路系統當中擔任核心角色、維護著基礎結構的和平。

Internet Protocol 😀


「欸你遊戲伺服器的 IP 是多少」,遊戲玩家都知道的經典問句。
嚴格說起來那個東西叫做 IP 位址 ( IP Address )。在這廣大的網路系統當中,位址就好比你家的門牌,而在這一個網路協定當中位址只是他的一部份。除此之外,他還規定如何為你的網路資料做封裝,也就是做成封包。還有定址與基礎路由的工作

這個協定各個版本的規定不同,目前主流且已面市的有 IPv4IPv6 兩種,將分別做介紹。

IPv4 網際網路協定版本 4


前幾個版本去哪了?基本上就是因為無法做為實際用途、或是純粹拿來實驗的
直到 IPv4 才被廣泛部署與使用。

位址 Address

IPv4 的位址是一個 32 位元長度的整數值。
而平時你應該會看到類似這樣的形式 192.168.1.1 ,稱為點分十進制。
把 32 個位元切成 4 份,用逗點隔開,每一份包含 8 個位元的資料並用十進制表示,也是目前最廣泛使用的表示方法,故不討論其他的表示方法。

遮罩與子網路 Mask & Subnet

當一個網路持有大量的 IP 位址時,在管理上是個非常大的問題,你那 500 元的 Router 的 Routing Table 肯定爆滿,效能也挺差的。而且你需要這麼多位址嗎?

因此透過切割網路來分組這些 IP 位址,分割出來的就稱子網路、網段,每個網段都可能持有不同數量的 IP 位址,是留了一個相當的彈性。

至於切割方式就是透過「遮罩」,使用遮罩來辨識你的裝置究竟在哪一個網段,所以知道哪一些 IP 位址資訊是你的裝置需要知道的。

遮罩與位址都是一個 32 位元的數值,有兩種表示方法:

( A ) 長度表示法。/n,例如 /8、/16、/24 ,也就是前 n 個都是 1。
( B ) 位址表示法。像是 255.255.255.0 這種形式。

這兩種是可以互換的,像是 255.255.255.0 轉換成二進址前面 24 個位元都是 1 ,所以在 ( A ) 表示方法就是 24,幹話。然後 8 要轉換成 ( B ) 表示法,也就是前 8 個位元都是 1,你會得到 127.0.0.0

得到遮罩之後,我們要將它與 IP 位址做 AND 運算,方可得到該網段,也能知道你的持有的 IP 在哪了。假設你有一 IP 位址 192.168.0.32 ,遮罩 /17,以下示範:

192.168.0.32        -> 11000000.10101000.00000000.00100000
/17 (255.255.128.0) -> 11111111.11111111.10000000.00000000
-----------------------------------------------------------
                       11000000.10101000.00000000.00000000
											 192.168.0.0 就是你的網段標識了。

修但幾壘,網段標識是什麼,其實你分割出來的網段還要「去頭去尾」,網段首個 IP 位址就是你這個網段的標識,而最後一個叫做廣播位址。以上面的例子就是 192.168.0.0 與 192.168.127.255。

不知道怎麼證明 192.168.127.255 是該網段最後一個位址的,請動手算一次。

另外你可以知道的是,這一個網段被切割成了 2^(17 - 16) 段,每個網段包含 2 ^ (24 - 17) 個 IP 位址。攤牌了,記住 8、16、24,這幾個數字,都是 8 的倍數,恰好點分十進制每一段都是 8 個位元。

出個問題給你,請問 192.168.128.1 ,遮罩 /17 與剛才的位址是同個網段嗎?

192.168.128.1       -> 11000000.10101000.10000000.00000001
/17 (255.255.128.0) -> 11111111.11111111.10000000.00000000
-----------------------------------------------------------
                       11000000.10101000.10000000.00000000
											 192.168.128.0

網段標識顯然不太一樣,證明不在同個網段的。

順帶一題你也可以用 IPv4位址/遮罩長度 來簡寫一個位址與網段關係。

保留位址 Reversed Address

Q:IPv4 的位址長度是 32,意思是有 2^32 個位址可用嗎?從 0.0.0.0 到 255.255.255.255?

A:說對一半,但是實際上能在廣域網路當中使用的會更少,除了每個網段「去頭去尾」之外,因為有些位址被保留下來做特殊用途的!

就好比 192.168.0.0 / 16 這一個子網路,他是常用在區域網路的位址分配上,畢竟位址有限,你可能也只需要一台裝置對外對內處理網際網路流量就好。

所以下次別人拿這個網段的 IP 給你,除非你跟他在同一區域網路內,否則你是連不到的。嗆他

封包結構 Packet Structure

廢話不多說,直接上圖 。

封包有兩個部分。

第一個是你的資料、

第二叫做 IP Header,告訴那些裝置你這個封包的基礎資訊、什麼協定、傳哪裡去之類的。

挑幾個重點,剩下請 Google。

目前面臨的問題

想當然爾,世界上有這麼多個人, 2^32 個位址夠分嗎。

實際上在 2011 年 IANA 便將所有的 IPv4 位址分配完了,人類不得不解決這個問題,也就是導入最新的 IPv6 協定,這個協定有著多到和天上星星差不多數量的位址。

當然遷移沒有這麼簡單,到今天都還一堆人在用 IPv4,現階段除了 v6 這個選擇之外,你應該也要參考一下這一篇 NAT 簡介